package com.tanovo.bo;

import lombok.Data;

import java.util.List;
import java.util.Map;
@Data
public class EsSearchReq {
    /**
     * 业务系统编码
     */
    private String systemCode;
    /**
     * 业务编码，类似表名
     */
    private String businessCode;
    /**
     * 第几页
     */
    private Integer page = 1;
    /**
     * 每页展示的梳理
     */
    private Integer size = 10;
    /**
     * 从第几条开始（不传）
     */
    private Integer from;
    /**
     * 搜索值
     */
    private String searchValue;
    /**
     * 搜索字段列表,此处的字段类型必须为String类型 或者 date类型且在上面加上 @JSONField(format="yyyy-MM-dd HH:mm:ss") 才行
     */
    private List<String> fieldsList;
    /**
     * 搜索的数字列表
     */
    private List<String> numberFieldsList;
    /**
     * 必须相等
     */
    private Map<String, Object> mustMap;
    /**
     * 必须不等
     */
    private Map<String, Object> mustNotMap;
    /**
     * in条件字符串查询， 字段属性值必须为字符串类型
     */
    private Map<String, Object[]> containMap;
    /**
     * not in条件字符串查询， 字段属性值必须为字符串类型
     * key 是字段名称，
     */
    private Map<String, Object[]> notContainMap;

    /**
     * 数字in条件查询, 请注意，value必须能转换为数字
     */
    private Map<String, Long[]> numberContainMap;

    /**
     * 数字not in条件查询.请注意，value必须能转换为数字
     */
    private Map<String, Long[]> numberNotContainMap;

    /**
     * 在....之间
     * key 是字段名称， list只能且必须是两个相同的值
     */
    private Map<String, List<Object>> betweenMap;

    /**
     * 排序字段列表信息
     */
//    private List<OrderItem> sortFields;

    /**
     * 是否高亮
     */
    private boolean highlight = false;

    /**
     * 模糊搜索
     */
    private Map<String, Object> shouldMap;

    /**
     * 针对时间、数字类型字段处理  可以和 shouldMap 合并
     */
    private Map<String, Object> matchMap;

    public Integer getFrom() {
        if (from == null) {
            from = (page - 1) * size;
        }
        return from;
    }
}